
insert into    asm_delib_6_12_dt
select 
codice_contratto,stato_contratto,trim(codice_movimento) movimento,
 periodo,
PIvaUtente,

PIvaDistributore,
CodContrDisp,
Pod,DataMisura,Trattamento,Tensione,PotContrImp,PotDisp,
max(Ka) Ka,max(Kr) Kr,max(Kp) Kp,    
max(MatrAtt) MatrAtt,max(MatrRea) MatrRea,max(MatrPot) MatrPot,
max(decode(trim(codice_movimento),'IA',DataMisura)) "DataInstMisAtt",
mAX(case when trim(MatrRea) is null or trim(codice_movimento) <> 'IA' then null else DataMisura end)  "DataInstMisRea",
max(case when trim(Matrpot) is null or trim(codice_movimento) <> 'IA' then null else DataMisura end)  "DataInstMisPot ",

max(CifreAtt) CifreAtt,max(CifreRea) CifreRea,max(CifrePot) CifrePot,
 GruppoMis,
Forfait,
decode (trim(codice_movimento),'IA','T','RASC','T','RACC','T','P')  Raccolta,
'E' TipoDato,
'S'  Validato,
max(EaM) EaM,max(ErM) ErM,max(PotM) PotM,
MAX(EaF1) EaF1,MAX(EaF2) EaF2,MAX(EaF3) EaF3,
MAX(ErF1) ErF1,MAX(ErF2) ErF2,MAX(ErF3) ErF3,
max(PotF1) PotF1,max(PotF2) PotF2,max(PotF3) PotF3,
max(EaMC) EaMC,max(ErMC) ErMC,max(PotM) PotMC,
MAX(EaF1C) EaF1C,MAX(EaF2C) EaF2C,MAX(EaF3C) EaF3C,
MAX(ErF1C) ErF1C,MAX(ErF2C) ErF2C,MAX(ErF3C) ErF3C,
max(PotF1) PotF1C,max(PotF2)PotF2C,max(PotF3)PotF3C,
DataInizioPeriodo,
EaM_1,
CodiceTariffa,
ServizioTutela,
 Prestazioni,
 iva_codfis



from (
select 
bf.codice_contratto,stato_contratto,decode(trim(bf.CODICE_MOVIMENTO),'L','L',null) movimento,bf.codice_movimento,
 'S'  periodo,
CASE WHEN  trim(pu.partita_iva) = trim(pu.CODICE_FISCALE) THEN trim(pu.partita_iva) ELSE 
 concat(concat ( trim(pu.partita_iva),'-'),trim(pu.CODICE_FISCALE)) END iva_codfis,
pt.PARTITA_IVA PIvaUtente,
'00693630550' PIvaDistributore,
ud.udd CodContrDisp,

concat('IT018E',concat(substr(concat('000000000',bf.codice_allacciamento),-7,7),substr(bf.progressivo_utenza,-1,1))) Pod,
to_date(to_char(bf.DATA_MOVIMENTO,'dd/mm/yyyy'),'dd/mm/yyyy') DataMisura,
 case when gp.opzione_tar ='IPBT' then 'O' else 
           case when  bf.codice_modello_contatore not like 'M%' or  bf.codice_modello_contatore is null then 'M' else 'F' end end Trattamento,
md.voltaggio_massimo Tensione,
co.POTENZA_IMPEGNATA PotContrImp,
co.POTENZA_TOLLERATA PotDisp,
fo.FATTORE_CORRETTIVO Ka,
fo.FATTORE_CORRETTIVO Kr,
fo.FATTORE_COMPRIMIBILITA  Kp,  
case when tipo_contatore <> 'M' and tipo_contatore <> 'R' then bf.matricola_contatore else null  end MatrAtt,
case when tipo_contatore in ('R','CR','M4') then bf.matricola_contatore else null  end  MatrRea,
case when tipo_contatore in ('M','M4') then bf.matricola_contatore else null  end  MatrPot,
case when tipo_contatore <> 'M' and tipo_contatore <> 'R' then ct.NUMERO_CIFRE_INTERE else 0  end CifreAtt,
case when  tipo_contatore in ('R','CR','M4')  then ct.NUMERO_CIFRE_INTERE else 0 end CifreRea,
case when  tipo_contatore in ('M','M4')  then ct.NUMERO_CIFRE_INTERE else 0 end   CifrePot,
decode (bf.codice_modello_contatore , null ,'NO','SI') GruppoMis,
decode (bf.codice_modello_contatore , null ,'SI','NO') Forfait,

case when bf.codice_modello_contatore not like 'M%' then bf.lettura ELSE 0 END   EaM,
case when bf.codice_modello_contatore not like 'M%' then nvl(ls.lettura_r1,0) ELSE 0 END  ErM,
case when bf.codice_modello_contatore not like 'M%' then nvl(ls.lettura_p1,0) ELSE 0 END   PotM,
case when bf.codice_modello_contatore like 'M%' then bf.lettura ELSE 0 END   EaF1,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_c2,0) ELSE 0 END   EaF2,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_c3,0) ELSE 0 END   EaF3,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_r1,0) ELSE 0 END   ErF1,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_r2,0) ELSE 0 END   ErF2,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_r3,0) ELSE 0 END   ErF3,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_p1,0) ELSE 0 END  PotF1,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_p2,0) ELSE 0 END  PotF2,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.lettura_p3,0) ELSE 0 END  PotF3,
case when bf.codice_modello_contatore not like 'M%' then bf.consumo ELSE 0 END   EaMC,
case when bf.codice_modello_contatore not like 'M%' then nvl(ls.consumo_r1,0) ELSE 0 END  ErMC,
case when bf.codice_modello_contatore like 'M%' then bf.consumo ELSE 0 END   EaF1C,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.consumo_c2,0) ELSE 0 END   EaF2C,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.consumo_c3,0) ELSE 0 END   EaF3C,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.consumo_r1,0) ELSE 0 END   ErF1C,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.consumo_r2,0) ELSE 0 END   ErF2C,
case when bf.codice_modello_contatore like 'M%' then nvl(ls.consumo_r3,0) ELSE 0 END   ErF3C,

decode (bf.codice_modello_contatore , null , to_char(bf.DATA_MOVIMENTO,'dd/mm/yyyy'))  DataInizioPeriodo,
decode (bf.codice_modello_contatore , null , bf.consumo) EaM_1,
 case when gp.OPZIONE_TAR = 'BT' and co.POTENZA_IMPEGNATA  <= 1.5 then 'BTA1' else
           case when gp.OPZIONE_TAR = 'BT' and co.POTENZA_IMPEGNATA  <= 3 then 'BTA2' else
                      case when gp.OPZIONE_TAR = 'BT' and co.POTENZA_IMPEGNATA  <= 6 then 'BTA3' else
                                 case when gp.OPZIONE_TAR = 'BT' and co.POTENZA_IMPEGNATA  <= 10 then 'BTA4' else     
                                            case when gp.OPZIONE_TAR = 'BT' and co.POTENZA_IMPEGNATA  <= 15 then 'BTA5' else
                                                       case when gp.OPZIONE_TAR = 'BT' and co.POTENZA_tollerata  >=16.5 then 'BTA6' else
                                                                  case when gp.OPZIONE_TAR = 'MT' and co.POTENZA_tollerata  <= 100 then 'MTA1' else 
                                                                             case when gp.OPZIONE_TAR = 'MT' and co.POTENZA_tollerata  <= 500 then 'MTA2' else 
                                                                                         case when gp.OPZIONE_TAR = 'MT' and co.POTENZA_tollerata >  500 then 'MTA3' else 
                                                                                                 OPZIONE_TAR 
                                                                                                 end end end end end end end end end      CodiceTariffa,
 case when gp.OPZIONE_TAR = 'MT'  then 'S' else 'MT'  end ServizioTutela,
'NO' Prestazioni

from 
DB1.ASM_DELIB_6_12_000 bf,

contatori_movimenti_ls ls,contratti co,contratti_aggregazioni ca,persone pt,
ASM_DELIBERA_16208_UDD ud,modelli_contatore md,contatori ct,forniture fo,gruppi gp ,persone pu

where bf.CODICE_GESTIONE='ASM'
and      bf.CODICE_SERVIZIO='E'
and      bf.CODICE_SERVIZIO=ls.CODICE_SERVIZIO(+)
and      bf.codice_modello_contatore=ls.codice_modello_contatore(+)
and      bf.matricola_contatore=ls.matricola_contatore(+)
and      bf.PROGRESSIVO_MOVIMENTO=ls.PROGRESSIVO_MOVIMENTO(+)
--and      bf.data_movimento between to_date('01012012','ddmmyyyy') and  to_date('01022012','ddmmyyyy')
and     co.CODICE_GESTIONE='ASM'
and      co.CODICE_SERVIZIO='E'
and     co.codice_contratto=bf.codice_contratto
and    co.codice_utente = ca.codice_utente
and     ca.CODICE_GESTIONE='ASM'  

and ca.codice_persona_titolare= pt.codice_persona
and ca.codice_persona_utilizzatore= pu.codice_persona
and ud.piva=pt.partita_iva

and      md.CODICE_SERVIZIO(+)='E'
and      md.codice_modello_contatore(+)=bf.codice_modello_contatore
and      ct.CODICE_SERVIZIO(+)='E'
and      ct.matricola_contatore(+)=bf.matricola_contatore
and      ct.codice_modello_contatore(+)=bf.codice_modello_contatore
and     fo.CODICE_GESTIONE='ASM'
and      fo.CODICE_SERVIZIO='E'
and bf.codice_allacciamento = fo.codice_allacciamento
and bf.progressivo_utenza = fo.progressivo_utenza
and bf.codice_contratto=fo.codice_contratto
and gp.CODICE_TARIFFA=co.codice_tariffa
and gp.CODICE_TIPO_USO=co.codice_tipo_uso
and gp.CODICE_USO=co.codice_uso
--and bf.codice_allacciamento = 491
--and co.codice_contratto in (11001023) --4000457,12000227)
)

group by 
PIvaUtente,
PIvaDistributore,
CodContrDisp,
Pod,DataMisura,Trattamento,Tensione,PotContrImp,PotDisp,DataInizioPeriodo,
EaM_1,codice_contratto,stato_contratto,decode(MOVIMENTO,'L','L',null),codice_movimento,
CodiceTariffa,
ServizioTutela,
 Prestazioni,periodo,iva_codfis,
 --decode(trim(codice_movimento),'IA',DataMisura) ,
--case when trim(MatrRea) is null or trim(codice_movimento) <> 'IA' then null else DataMisura end  ,
--case when trim(Matrpot) is null or trim(codice_movimento) <> 'IA' then null else DataMisura end,
gruppomis,forfait,decode (trim(codice_movimento),'IA','T','RASC','T','P')